package com.example.leetcode.c101_c200.c108;
/**
 * 将一个按照升序排列的有序数组，转换为一棵高度平衡二叉搜索树。
 *
 * 本题中，一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
 *
 * 示例:
 *
 * 给定有序数组: [-10,-3,0,5,9],
 *
 * 一个可能的答案是：[0,-3,9,-10,null,5]，它可以表示下面这个高度平衡二叉搜索树：
 *
 *       0
 *      / \
 *    -3   9
 *    /   /
 *  -10  5
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */

import com.example.leetcode.common.TreeNode;
import com.example.leetcode.common.TreeNodeWrapper;

import java.util.Arrays;

/**
 * 将有序数组转换为二叉搜索树
 * @author zhanpengguo
 * @date 2020/10/3 10:40
 */
public class Solution {

    public TreeNode sortedArrayToBST(int[] nums) {
        if (nums.length == 0) {
            return null;
        }
        int i = nums.length / 2;
        if (i == 0) {
            return new TreeNode(nums[0]);
        }
        TreeNode root = new TreeNode(nums[i]);
        root.left = sortedArrayToBST(Arrays.copyOfRange(nums,0, i));
        root.right = sortedArrayToBST(Arrays.copyOfRange(nums, i + 1, nums.length));
        return root;
    }

    public static void main(String[] args) {
        int[] nums = {-10};
        Solution solution = new Solution();
        TreeNode root = solution.sortedArrayToBST(nums);
        TreeNodeWrapper.prettyPrintTree(root);
    }
}
